package ve.ucv.patologiaocular.showcase;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import ve.ucv.patologiaocular.dao.SitioDeLesionDAO;
import ve.ucv.patologiaocular.dao.SitioDeLesionDAOImpl;
import ve.ucv.patologiaocular.domain.SitioDeLesion;

import com.opensymphony.xwork2.ActionSupport;

public class ListarSitioDeLesion extends ActionSupport {

	private static final long serialVersionUID = -9015538910016027678L;
	private static final Log log = LogFactory.getLog(ListarSitioDeLesion.class);
	private SitioDeLesionDAO sitioDeLesionDAO = null;
	private List<SitioDeLesion> gridModel;
	private List<SitioDeLesion> sitiosDeLesion;
	private Integer rows = 0;
	private Integer page = 0;
	private Integer total = 0;
	private Integer records = 0;
	private boolean loadonce = false;
	private String codigo;
	private String nombre;
	private String descripcion;
	
	public String execute() {
		log.debug("Page " + getPage()+" Rows " + getRows());
	    this.sitioDeLesionDAO = new SitioDeLesionDAOImpl();
	    
	    if(codigo == null && nombre == null && descripcion == null){
	    	sitiosDeLesion = sitioDeLesionDAO.listarSitiosDeLesion();
	    }
	    else{
	    	sitiosDeLesion = sitioDeLesionDAO.buscarSitioDeLesion(codigo, nombre, descripcion);
	    }
	    
	    setRecords(sitiosDeLesion.size());

	    int to = (getRows() * getPage());
	    int from = to - getRows();

	    if (to > getRecords()) to = getRecords();

	    if (loadonce)
	    {
	      setGridModel(sitiosDeLesion);
	    }
	    else
	    {
	    	 setGridModel(sitioDeLesionDAO.obtenerSitiosDeLesion(sitiosDeLesion, from, to));
	    }
	    
	    setTotal((int) Math.ceil((double) getRecords() / (double) getRows()));
		
		return SUCCESS;
	}
	
	public String getJSON()
	{
	    return execute();
	}

	public SitioDeLesionDAO getSitioDeLesionDAO() {
		return sitioDeLesionDAO;
	}

	public void setSitioDeLesionDAO(SitioDeLesionDAO sitioDeLesionDAO) {
		this.sitioDeLesionDAO = sitioDeLesionDAO;
	}

	public List<SitioDeLesion> getGridModel() {
		return gridModel;
	}

	public void setGridModel(List<SitioDeLesion> gridModel) {
		this.gridModel = gridModel;
	}

	public List<SitioDeLesion> getSitiosDeLesion() {
		return sitiosDeLesion;
	}

	public void setSitiosDeLesion(List<SitioDeLesion> sitiosDeLesion) {
		this.sitiosDeLesion = sitiosDeLesion;
	}

	public Integer getRows() {
		return rows;
	}

	public void setRows(Integer rows) {
		this.rows = rows;
	}

	public Integer getPage() {
		return page;
	}

	public void setPage(Integer page) {
		this.page = page;
	}

	public Integer getTotal() {
		return total;
	}

	public void setTotal(Integer total) {
		this.total = total;
	}

	public Integer getRecords() {
		return records;
	}

	public void setRecords(Integer records) {
		this.records = records;
		
		if (this.records > 0 && this.rows > 0)
	    {
	      this.total = (int) Math.ceil((double) this.records / (double) this.rows);
	    }
	    else
	    {
	      this.total = 0;
	    }
	}

	public boolean isLoadonce() {
		return loadonce;
	}

	public void setLoadonce(boolean loadonce) {
		this.loadonce = loadonce;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

}
